home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / python-support / gnome-games-data / glchess / gtkui / log.py < prev    next >
Encoding:
Python Source  |  2009-04-14  |  3.8 KB  |  121 lines

  1. # -*- coding: utf-8 -*-
  2. __author__ = 'Robert Ancell <bob27@users.sourceforge.net>'
  3. __license__ = 'GNU General Public License Version 2'
  4. __copyright__ = 'Copyright 2005-2006  Robert Ancell'
  5.  
  6. import gtk
  7. import pango
  8.  
  9. import gtkui
  10. import glchess.ui
  11.  
  12. class LogWindow:
  13.     """
  14.     """
  15.     
  16.     notebook    = None
  17.     defaultPage = None
  18.     
  19.     # We keep track of the number of pages as there is a bug 
  20.     # in GtkNotebook (Gnome bug #331785).
  21.     pageCount   = 0
  22.     
  23.     def __init__(self, notebook):
  24.         """
  25.         """
  26.         self.notebook = notebook
  27.         self.defaultPage = notebook.get_nth_page(0)
  28.     
  29.     def addView(self, title, executable, description):
  30.         """
  31.         """
  32.         # Hide the default page
  33.         self.defaultPage.hide()
  34.         self.notebook.set_show_tabs(True)
  35.         
  36.         self.pageCount += 1
  37.         return LogView(self, title, executable, description)
  38.  
  39. class LogView(glchess.ui.Log):
  40.     """
  41.     """
  42.     
  43.     __gui = None
  44.     
  45.     def __init__(self, window, title, executable, description):
  46.         """
  47.         """
  48.         self.window = window
  49.         self.__gui = gtkui.loadGladeFile('log.glade', 'log_table')
  50.         self.__gui.get_widget('executable_label').set_text(executable)
  51.         self.__gui.get_widget('game_label').set_text(description)
  52.  
  53.         # Add into the notebook
  54.         self.root = self.__gui.get_widget('log_table')
  55.         notebook = window.notebook
  56.         notebook.append_page(self.root, gtk.Label(title))
  57.                 
  58.         # Create styles for the buffer
  59.         buffer = self.__gui.get_widget('comms_textview').get_buffer()
  60.         buffer.create_tag('input', family='Monospace')
  61.         buffer.create_tag('output', family='Monospace', weight = pango.WEIGHT_BOLD)
  62.         buffer.create_tag('move', family='Monospace', foreground = 'blue')
  63.         buffer.create_tag('info', family='Monospace', foreground = 'green')
  64.         buffer.create_tag('error', family='Monospace', foreground = 'red')
  65.         buffer.create_mark('end', buffer.get_end_iter())
  66.         
  67.     def addBinary(self, data, style = None):
  68.         text = ''
  69.         while len(data) > 0:
  70.             bin = ''
  71.             ascii = ''
  72.             for i in xrange(8):
  73.                 try:
  74.                     c = data[i]
  75.                 except IndexError:
  76.                     bin   += '   '
  77.                     ascii += ' '
  78.                 else:
  79.                     o = ord(c)
  80.                     bin += '%02X ' % o
  81.                     if o >= 0x20 and o & 0x80 == 0:
  82.                         ascii += c
  83.                     else:
  84.                         ascii += '.'
  85.                 if i == 3:
  86.                     bin += ' '
  87.                     ascii += ' '
  88.             data = data[8:]
  89.             text += '%s %s\n' % (bin, ascii)
  90.         self.addText(text, style)
  91.  
  92.     def addText(self, text, style = None):
  93.         """FIXME: Define style
  94.         """
  95.         view = self.__gui.get_widget('comms_textview')
  96.         scroll = self.__gui.get_widget('comms_scrolled_window')
  97.         buffer = view.get_buffer()
  98.         mark = buffer.get_mark('end')
  99.         adj = scroll.get_vadjustment()
  100.         atBottom = adj.value >= adj.upper - adj.page_size
  101.         if style is None:
  102.             buffer.insert(buffer.get_iter_at_mark(mark), text)
  103.         else:
  104.             buffer.insert_with_tags_by_name(buffer.get_iter_at_mark(mark), text, style)
  105.         if atBottom:
  106.             view.scroll_mark_onscreen(mark)
  107.             
  108.     def addLine(self, text, style = None):
  109.         self.addText('\n' + text, style)
  110.         
  111.     def close(self):
  112.         """
  113.         """
  114.         self.window.pageCount -= 1
  115.         self.window.notebook.remove_page(self.window.notebook.page_num(self.root))
  116.         
  117.         # Show the default page
  118.         if self.window.pageCount == 0:
  119.             self.window.defaultPage.show()
  120.             self.window.notebook.set_show_tabs(False)
  121.